package de.unicornEntertainment.stundenplanapp.threadTools;

import java.util.ArrayList;
import java.util.HashMap;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.Intent;
import android.os.AsyncTask;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.SimpleAdapter;
import de.unicornEntertainment.stundenplanapp.R;
import de.unicornEntertainment.stundenplanapp.lehreruebersicht.LehrerDetailsActivity;
import de.unicornEntertainment.stundenplanapp.lehreruebersicht.LehreruebersichtActivity;
import de.unicornEntertainment.stundenplanapp.util.JSONParser;

public class MyAsyncTask_Lehrerliste extends AsyncTask {

		// Globale Deklaration
		private LehreruebersichtActivity context;
		private JSONArray lehrerliste;
				
		// JSON Nodes
		private static final String TAG_LEHRER = "lehrer";
		private static final String TAG_IDLEHRER = "idLehrer";
		private static final String TAG_KURZNAME = "Kurzname";
		private static final String TAG_NAME = "Name";
		private static final String TAG_VORNAME = "Vorname";
		private static final String TAG_TELEFON = "Telefonnummer";
		private static final String TAG_EMAIL = "E-Mail";
		private static final String TAG_GESAMTNAME = "Gesamtname";
		
		private String url = "http://gruppef.green-lagoon.de/lehrer.php";
		
		// ArrayList um Lehrerinfos zu Speichern
		private ArrayList<HashMap<String, String>> lehrerinfos;
		
		
		// Konstruktor
		public MyAsyncTask_Lehrerliste(LehreruebersichtActivity context) {
			this.context = context;
		}

		// Hintergrundverarbeitung in eigenem Thread
		@Override
		protected Object doInBackground(Object... arg0) {
			try {
				// JSON Parser instanziieren
				JSONParser jParser = new JSONParser();
				
				// JSON als String von URL abgreifen
				JSONObject lehrer = jParser.getJSONFromUrl(url);
				
//				System.out.println(S"JSON: " + lehrer.toString());
				
				// JSON-Array mit allen Lehrern abrufen
	            lehrerliste = lehrer.getJSONArray(TAG_LEHRER);
	            
//	            System.out.println("Anzahl Lehrer im JSON-Array: " + lehrerliste.length());
	            
	            lehrerinfos = new ArrayList<HashMap<String,String>>();
	            
	            // Über alle Blöcke iterieren
	            for(int i = 0; i < lehrerliste.length(); i++){
	                JSONObject einzellehrer = lehrerliste.getJSONObject(i);
	                 
	                // Jedes JSON-Item in eine Variable stellen
	                String idLehrer = einzellehrer.getString(TAG_IDLEHRER);
	                String kurzname = einzellehrer.getString(TAG_KURZNAME);
	                String name = einzellehrer.getString(TAG_NAME);
	                String vorname = einzellehrer.getString(TAG_VORNAME);
	                String telefonnummer = einzellehrer.getString(TAG_TELEFON);
	                String email = einzellehrer.getString(TAG_EMAIL);
	                 
//	                System.out.println("LehrerID: " + idLehrer); 
	                
	                // Eine neue HashMap erzeugen
	                HashMap<String, String> map = new HashMap<String, String>();
	                 
	                // adding each child node to HashMap key => value
	                map.put(TAG_IDLEHRER, idLehrer);
	                map.put(TAG_KURZNAME, kurzname);
	                map.put(TAG_NAME, name);
	                map.put(TAG_GESAMTNAME, name + ", " + vorname + " - " +kurzname);
	                map.put(TAG_VORNAME, vorname);
	                map.put(TAG_TELEFON, telefonnummer);
	                map.put(TAG_EMAIL, email);
	                
//	                System.out.println("HashMap-Inhalt: " + map);
	 
	                // HashMap zu ArrayList hinzufügen
	                context.getLehrernamen().add(map);
//	                Log.d("AsynTask", "HashMap: " + i);
				}
			}
			catch(JSONException e) {
				e.printStackTrace();
				
				// Dialog im Fehlerfall entlassen
				context.getPrg().dismiss();
			}
			return null;
		}
		
		// Nachbearbeitung im Vordergrund... Thread der GUI
		@Override
		protected void onPostExecute(Object result) {
			
			/**
	         * Die Daten aus den JSON-Objekten an den Adapter übergeben.
	         * */
	        context.setAdapter(new SimpleAdapter(context, context.getLehrernamen(),
	                R.layout.lehrerliste_listview_row,
//	                new String[] {TAG_NAME, TAG_VORNAME, TAG_KURZNAME},
//	                new int[] {R.id.lehreruebersicht_listview_row_lehername,
//	        					R.id.lehreruebersicht_listview_row_lehervorname,
//	        					R.id.lehreruebersicht_listview_row_lehrerkuerzel }));
	                new String[] {TAG_GESAMTNAME},
	                new int[] {R.id.lehreruebersicht_listview_row_lehrername}));
	 
	        // Adapter in der ListView registrieren 
	        context.getLehrerliste().setAdapter(context.getAdapter());
	        
	        // selecting single ListView item
	        context.getLehrerliste().setOnItemClickListener(new OnItemClickListener() {
	 
	            @Override
	            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
	            	
	            	// Werte auslesen und zuweisen
	                HashMap<String, String> lehrerdaten = (HashMap<String, String>) parent.getAdapter().getItem(position);
	                LehreruebersichtActivity.setLehrerdaten(lehrerdaten);
	                 
	                // Intent vorbereiten
	                Intent intent = new Intent(context, LehrerDetailsActivity.class);
	                context.startActivity(intent);
	            }
	        });
			
	        // Dialog entlassen
	        context.getPrg().dismiss();
		}

}
